package _3sort.src;


import java.util.Comparator;
import java.util.PriorityQueue;

/**
 * @className: _6HeadSory_probllrem_2
 * @description:
 * @author: myself
 * @date: 2025/7/18 19:57
 * @version: 0.1
 * @since: JDK17
 */

//我们在这里进行比较器方法的重写
public class _6HeadSory_probllrem_2 implements Comparator<Integer> {
    @Override
    public int compare(Integer o1, Integer o2) {
        return o2 - o1;
    }
    public static void main(String[] args) {
        //优先级队列就相当于小根堆，扩容直接是翻倍进行扩容
        //这里若是我们想要进行修改将其变成为大根堆，那么就需要传入一个比较器
        PriorityQueue<Integer> integers = new PriorityQueue<>(new _6HeadSory_probllrem_2());//将重写后的比较器传入进去获取大根堆
        /*也可以不重写相关的比较器，在这里使用相关的匿名内部类，也可以直接实现上述的功能
        PriorityQueue<Integer> integers = new PriorityQueue<>(new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2-o1;
            }
        });*/

        //其实最简单是使用相关的lambda表示式，jdk8以后的特性，使用条件，相关接口有且仅有一个要重写的对象，详细内容可以参考接下来的那个类
        integers.add(12);
        integers.add(58);
        integers.add(8);
        integers.add(38);
        integers.add(24);
        integers.add(6);
        //这里已经有了相关的比较器的重写，原本先弹出的一定是最小值，重写相关的方法后先数出的一定就是最大值
        System.out.println("弹出的第一个值：" + integers.peek());//只查看
        System.out.println("弹出的第一个值：" + integers.poll());//弹出
        System.out.println("弹出的第二个值：" + integers.poll());//弹出
        integers.forEach(System.out::println);
    }
}
